import axios from 'axios'; // 引入axios
import QS from 'qs'

import store from 'store'



// 环境的切换
if (process.env.NODE_ENV == 'development') {
  axios.defaults.baseURL = 'http://127.0.0.1:3000/';
} else if (process.env.NODE_ENV == 'debug') {
  axios.defaults.baseURL = 'http://127.0.0.1:3000/';
} else if (process.env.NODE_ENV == 'production') {
  axios.defaults.baseURL = 'http://127.0.0.1:3000/';
}

// 请求超时
axios.defaults.timeout = 10000;


// 请求头
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';


// 请求拦截


// 请求拦截器axios.interceptors.request.use(    
// config => {
//     // 每次发送请求之前判断vuex中是否存在token        
//     // 如果存在，则统一在http请求的header都加上token，这样后台根据token判断你的登录情况
//     // 即使本地存在token，也有可能token是过期的，所以在响应拦截器中要对返回状态进行判断 
//     const token = store.state.token;
//     token && (config.headers.Authorization = token);
//     return config;
//   },
//   error => {
//     return Promise.error(error);
//   })

// 这里说一下token，一般是在登录完成之后，将用户的token通过localStorage或者cookie存在本地，
// 然后用户每次在进入页面的时候（即在main.js中），会首先从本地存储中读取token，如果token存在说明用户
// 已经登陆过，则更新vuex中的token状态。然后，在每次请求接口的时候，都会在请求的header中携带token，后
// 台人员就可以根据你携带的token来判断你的登录是否过期，如果没有携带，则说明没有登录过。这时候或许有些小
// 伙伴会有疑问了，就是每个请求都携带token，那么要是一个页面不需要用户登录就可以访问的怎么办呢？其实，你前
// 端的请求可以携带token，但是后台可以选择不接收啊！

// 响应拦截器


axios.interceptors.response.use(response => {
  // 如果返回的状态码为200，说明接口请求成功，可以正常拿到数据     
  // 否则的话抛出错误
  if (response.status === 200) {
    return Promise.resolve(response);
  } else {
    return Promise.reject(response);
  }


  // 服务器状态码不是2开头的的情况
  // 这里可以跟你们的后台开发人员协商好统一的错误状态码    
  // 然后根据返回的状态码进行一些操作，例如登录过期提示，错误提示等等
  // 下面列举几个常见的操作，其他需求可自行扩展
  // error => {
  //   if (error.response.status) {
  //     switch (error.response.status) {
  //       // 401: 未登录
  //       // 未登录则跳转登录页面，并携带当前页面的路径
  //       // 在登录成功后返回当前页面，这一步需要在登录页操作。                
  //       case 401:
  //         router.replace({
  //           path: '/login',
  //           query: {
  //             redirect: router.currentRoute.fullPath
  //           }
  //         });
  //         break;

  //         // 403 token过期
  //         // 登录过期对用户进行提示
  //         // 清除本地token和清空vuex中token对象
  //         // 跳转登录页面                
  //       case 403:
  //         Toast({
  //           message: '登录过期，请重新登录',
  //           duration: 1000,
  //           forbidClick: true
  //         });
  //         // 清除token
  //         localStorage.removeItem('token');
  //         store.commit('loginSuccess', null);
  //         // 跳转登录页面，并将要浏览的页面fullPath传过去，登录成功后跳转需要访问的页面 
  //         setTimeout(() => {
  //           router.replace({
  //             path: '/login',
  //             query: {
  //               redirect: router.currentRoute.fullPath
  //             }
  //           });
  //         }, 1000);
  //         break;

  //         // 404请求不存在
  //       case 404:
  //         Toast({
  //           message: '网络请求不存在',
  //           duration: 1500,
  //           forbidClick: true
  //         });
  //         break;
  //         // 其他错误，直接抛出错误提示
  //       default:
  //         Toast({
  //           message: error.response.data.message,
  //           duration: 1500,
  //           forbidClick: true
  //         });
  //     }
  return Promise.reject(error.response);
  //   }
  // }
  // }
})


// 封装get方法
export function get (url, params) {
  return new Promise((resolve, reject) => {
    axios.get(url, {
      params: params
    }).then(res => {
      resolve(res.data);
    }).catch(err => {
      reject(err.data)
    })
  });
}

// post方法
export function post (url, params) {
  return new Promise((resolve, reject) => {
    axios.post(url, QS.stringify(params))
      .then(res => {
        resolve(res.data);
      })
      .catch(err => {
        reject(err.data)
      })
  });
}
